如何用位异或运算(^)交换两个数的值!

来源:百度知道 编辑:UC知道 时间:2024/05/30 10:42:02
如何用位异或运算(^)交换两个数的值!哪位高手能解说一下,谢谢!

#include <stdio.h>
int main()
{
int a = 10,b = 23,c;
/*
//先推导:把10和23都转换成二进制数
2 10 0
2 5 1
2 2 0
2 1 1
//得出A=10=0000 1010
演算1*2^1+1*2^3=2+8=10
2 23 1
2 11 1
2 5 1
2 2 0
2 1 1
//得出B=23=0001 0111
演算1*2^0+1*2^1+1*2^2+1*2^4=1+2+4+16=23
//然后设一个中间值C
C=A^B
0000 1010
^ 0001 0111
______________
0001 1101
//得到一个中间值0001 1101把它转换成十进制数
0001 1101
1+1*2^2+1*2^3+1*2^4
1+4+8+16=29
//得出C=29=0001 1101
演算
2 29 1
2 14 0
2 7 1
2 3 1
2 1 1
得到0001 1101(正确)
//A=10=0000 1010
//B=23=0001 0111
//C=29=0001 1101
A=C^A
0001 1101
^ 0000 1010
_____________
0001 0111
得到一个二进制数把它转换为十进制显示
0001 0111
1+2+4+16=23
B=C^B
0001 1101
^ 0001 0111
______________
0000 1010
得到一个二进制数把它转换成十进制显示
0000 1010
1*2^1+1*2^3
=2+8
=10